package org.jftclient.terminal; import java.io.IOException; import java.io.PrintStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javafx.event.Event; import javafx.scene.control.TextArea; import javafx.scene.input.KeyEvent; import javafx.scene.text.Font; /** * @author sergei.malafeev */ public class TerminalPanel { private static final Logger logger = LoggerFactory.getLogger(TerminalPanel.class); private TextArea textArea; public TerminalPanel() { textArea = new TextArea(); textArea.setFont(Font.font("Monospaced", 14)); } public void setPrintStream(PrintStream printStream) { textArea.addEventHandler(KeyEvent.KEY_RELEASED, Event::consume); textArea.addEventHandler(KeyEvent.KEY_TYPED, Event::consume); textArea.addEventHandler(KeyEvent.KEY_PRESSED, event -> { byte[] code = TerminalUtils.getCode(event, TerminalPanel.this); if (code != null) { try { printStream.write(code); } catch (IOException e) { logger.warn("failed to write to stream", e); } } else { printStream.print(event.getText()); } event.consume(); } ); } public TextArea getTextArea() { return textArea; } }